/*
* Author: Chris Seguin
*
* This software has been developed under the copyleft
* rules of the GNU General Public License. Please
* consult the GNU General Public License for more
* details about use and distribution of this software.
*/
package org.acm.seguin.ide.jbuilder.refactor;
import com.borland.jbuilder.node.JavaFileNode;
import com.borland.primetime.ide.Browser;
import com.borland.primetime.node.Node;
import com.borland.primetime.vfs.Buffer;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import org.acm.seguin.ide.common.MultipleDirClassDiagramReloader;
import org.acm.seguin.ide.common.action.SelectedFileSet;
import org.acm.seguin.ide.jbuilder.UMLNodeViewerFactory;
import org.acm.seguin.summary.FileSummary;
import org.acm.seguin.summary.TypeSummary;
/**
* The concrete implementation of this class for JBuilder
*
*@author Chris Seguin
*/
public class JBuilderSelectedFileSet extends SelectedFileSet {
private Node[] initialNodes;
/**
* Constructor for the JBuilderSelectedFileSet object
*
*@param init Description of Parameter
*/
public JBuilderSelectedFileSet(Node[] init)
{
initialNodes = init;
}
/**
* Gets the AllJava attribute of the SelectedFileSet object
*
*@return The AllJava value
*/
public boolean isAllJava()
{
Node[] nodeArray = getNodes();
for (int ndx = 0; ndx < nodeArray.length; ndx++) {
if (!(nodeArray[0] instanceof JavaFileNode)) {
return false;
}
}
return true;
}
/**
* Gets the SingleJavaFile attribute of the SelectedFileSet object
*
*@return The SingleJavaFile value
*/
public boolean isSingleJavaFile()
{
Node[] nodeArray = getNodes();
return (nodeArray.length == 1) && (nodeArray[0] instanceof JavaFileNode);
}
/**
* Gets the TypeSummaryArray attribute of the SelectedFileSet object
*
*@return The TypeSummaryArray value
*/
public TypeSummary[] getTypeSummaryArray()
{
Node[] nodeArray = getNodes();
TypeSummary[] typeSummaryArray = new TypeSummary[nodeArray.length];
for (int ndx = 0; ndx < nodeArray.length; ndx++) {
TypeSummary typeSummary = getTypeSummaryFromNode(nodeArray[ndx]);
if (typeSummary == null) {
return null;
}
typeSummaryArray[ndx] = typeSummary;
}
return typeSummaryArray;
}
/**
* Gets the TypeSummaryFromNode attribute of the AddParentClassAction object
*
*@param node Description of Parameter
*@return The TypeSummaryFromNode value
*/
private TypeSummary getTypeSummaryFromNode(Node node)
{
FileSummary fileSummary = reloadNode(node);
if (fileSummary == null) {
return null;
}
return getTypeSummary(fileSummary);
}
/**
* Gets the Nodes attribute of the JBuilderRefactoringAction object
*
*@return The Nodes value
*/
private Node[] getNodes()
{
if (initialNodes == null) {
Node[] nodeArray = new Node[1];
Browser browser = Browser.getActiveBrowser();
nodeArray[0] = browser.getActiveNode();
return nodeArray;
}
else {
return initialNodes;
}
}
/**
* Description of the Method
*
*@param node Description of Parameter
*@return Description of the Returned Value
*/
private FileSummary reloadNode(Node node)
{
try {
if (node instanceof JavaFileNode) {
JavaFileNode jtn = (JavaFileNode) node;
Buffer buffer = jtn.getBuffer();
byte[] contents = buffer.getContent();
ByteArrayInputStream bais = new ByteArrayInputStream(contents);
return reloadFile(jtn.getUrl().getFileObject(), bais);
}
}
catch (IOException ioe) {
// Unable to get the buffer for that node, so fail
}
return null;
}
}